#include <iostream>
#include <memory>
#include "Reactor.hpp"
#include "Connection.hpp"
#include "HandlerConnection.hpp"
#include "Listener.hpp"
#include "PackageParse.hpp"
#include "Log.hpp"

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        cout << "正确用法:" << argv[0] << " port" << endl;
        return -1;
    }
    uint16_t port = stoi(argv[1]);
    // 开启日志
    EnableScreen();
    // 主服务
    unique_ptr<Reactor> react = make_unique<Reactor>();
    // 事件处理
    HandlerConnection hc(PackageParse::Parse);
    // 链接模块---listen sock
    Listener listener(port, hc);

    // 向svr-TcpServer中添加fd、事件关心、对应方法
    // 将链接注册进入主服务中---listen sock,对于listen sockfd，只需要关心读方法即可
    react->AddConnection(
        listener.Sockfd(),
        EPOLLIN | EPOLLET,
        bind(&Listener::Accepter, &listener, placeholders::_1),
        nullptr,
        nullptr);
    // 主服务执行事件派发服务
    react->Dispatcher();

    return 0;
}